package models;

import play.data.format.Formats;
import play.data.validation.Constraints.Required;
import play.db.ebean.Model;

import javax.persistence.*;

import java.math.BigDecimal;
import java.util.*;

@Entity
public class Proposition extends Model {

	/**
	 * @param date
	 * @param fournisseur
	 * @param produits
	 */
	public Proposition(Date date, Fournisseur fournisseur) {
		this.date = date;
		this.fournisseur = fournisseur;
	}

	private static final long serialVersionUID = 1L;
	
	@Id
	public Long id;
	
	@Formats.DateTime(pattern="dd-mm-yyyy")
	public Date date;
	
	@Required
	@ManyToOne
	public Fournisseur fournisseur;

	
	@OneToMany(mappedBy = "proposition", cascade = CascadeType.ALL)
	public List<ProduitProposition> produits;

	public int contient(String label){
		List<Produit> lp=getlProduit();
		int i=0;
		while(i<lp.size() && !lp.get(i).label.equals(label)){
			i++;			
		}
		return i;
	}
	
	public List<Produit> getlProduit() {		
		
		List<ProduitProposition> lpList=ProduitProposition.find.all();
		
		List<Produit> lprodList=new ArrayList<Produit>();
		
		for(ProduitProposition p : lpList ){
			Produit prod=Produit.find.byId(p.produitId);
			if(prod!=null) lprodList.add(prod);
		}
		
		return lprodList ;
	}
	
	public static List<Proposition> lProposition(Long id){
		return find.where().eq("id", id).findList();
	}

	public static Finder<Long,Proposition> find=new Finder<Long, Proposition>(Long.class, Proposition.class);
	
	public void ajouterProduit(Produit p, BigDecimal prix) {
		// TODO Auto-generated method stub
		ProduitProposition association=new ProduitProposition();
		association.produit=p;
		association.proposition=this;
		association.produitId=p.id;
		association.propositionId=this.id;
		association.prix=prix;
		
		this.produits.add(association);
		
		p.propositions.add(association);
		
		p.save();
		
		this.save();
	}

	public Boolean valider(Proposition prop) {
		// TODO Auto-generated method stub
		return null;
	}

	public Boolean soumettreProposition(Proposition prop) {
		// TODO Auto-generated method stub
		return null;
	}

	public void supprimerProduit(Produit p) {
		// TODO Auto-generated method stub
		int index=trouverProduit(p);
		if(index!=-1) produits.remove(index);
	}

	private int trouverProduit(Produit p) {
		// TODO Auto-generated method stub
		return produits.indexOf(p);
	}

	public void modifierProposition(Proposition prop) {
		// TODO Auto-generated method stub
		
	}

	public void supprimerProposition(Proposition prop) {
		// TODO Auto-generated method stub
		
	}

	public void ajouterCaracteristique() {
		// TODO Auto-generated method stub
		
	}

	public void ajouterType() {
		// TODO Auto-generated method stub
		
	}

	public void ajouterOption() {
		// TODO Auto-generated method stub
		
	}

	public void afficherProposition() {
		// TODO Auto-generated method stub
		
	}

	public void validerProposition() {
		// TODO Auto-generated method stub
		
	}
    
}
